// h() _c()
export function createElementVNode(vm, tag, data, ...children) {
  // 避免data为null报错
  if (data == null) data = {};

  let key = data.key;
  if (key) {
    delete data.key;
  }

  return vnode(vm, tag, key, data, children);
}

// _v()
export function createTextVNode(vm, text) {
  return vnode(vm, undefined, undefined, undefined, undefined, text);
}

// ast做的是语法层面的转换，描述的是语法本身（可以描述js、css、html）
// vnode虚拟dom描述的是dom元素，可以增加一些自定义属性
function vnode(vm, tag, key, data, children, text) {
  return {
    vm,
    tag,
    key,
    data,
    children,
    text,
  };
}

export function isSameVnode(vnode1, vnode2) {
  return vnode1.tag === vnode2.tag && vnode1.key === vnode2.key;
}
